package com.pluginsacceptor.plugin.chart.impl;

import java.util.List;
import java.util.Observable;

import com.pluginsacceptor.plugin.chart.model.ChartData;

/**
 * La classe <code>TableauEntierEtendu</code> permet de construire des tableaux d'entiers
 * avec des valeurs al�atoires, elle fournit des m�thodes pour m�langer le tableau,
 * calculer sa plus grande valeur, etc...
 *
 * @author  Michel Buffa, modifi� par $Author: grin $
 * @version $Revision: 1.4 $, $Date: 2009/10/1  F. Mallet (ITableauEntier + assert)
 * @version $Revision: 1.3 $, $Date: 2000/10/16 Michel Buffa
 * @version $Revision: 1.2 $, $Date: 1999/09/30 12:59:03 $
 */
public class TableauEntierEtendu extends Observable implements ITableauEntier {

    /** */
    private ChartData tab;

    /** */
    private List<String> title;


    /**
     * @return longueur du tableau
     */
    @Override
    public int getLongueur() {
        return tab == null ? 0 : tab.getNumberDataColumn();
    }

    /*
     * Remplit le tableau avec des nombres entiers positifs al�atoires,
     * compris entre 0 et maxValeurs
     */
    public void melange(final ChartData data) {
        this.tab = data;
        this.title = data.getTitle();
        previensLesObservateurQueTuAsChange();
    }

    protected void previensLesObservateurQueTuAsChange() {
        setChanged();
        notifyObservers();
    }
    /**
     * @return la valeur du nieme �l�ment du tableau
     */
    @Override
    public List<Double> getValeur(final int n) {
        return tab.getData(n);
    }

    @Override
    public int getMaximum() {
        int maxValeurs = -1;
        if (tab != null) {
            for (int cnt = this.tab.getNumberDataColumn(); --cnt >= 0;) {
                for (final Double item : this.tab.getData(cnt)) {
                    if (maxValeurs < item) {
                        maxValeurs = item.intValue();
                    }
                }
            }
        }

        return maxValeurs;
    }


    @Override
    public List<String> getTitle() {
        return this.title;
    }
}
